import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  // 只有 mutation 中定义的函数才由修改 state 中数据的权力
  mutations: {
    // 不带参
    add(state) {
      // count 自增
      state.count++
    },
    // 带参
    addN(state, step) {
      // 第一个形参永远都是state也就是$state对象
      // 第二个形参是调用add时传递的参数
      state.count += step
    },
    sub(state) {
      // 自减
      state.count--
    },
    subN(state, step) {
      state.count -= step
    }
  },
  actions: {
    // 异步不带参
    addAsync(context) {
      setTimeout(() => {
        // 通过 context 调用 commit 间接触发 mutation 中的函数
        context.commit('add')
      }, 1000)
    },
    // 异步带参
    addNAsync(context, step) {
      setTimeout(() => {
        context.commit('addN', step)
      }, 1000)
    },
    subAsync(context) {
      setTimeout(() => {
        context.commit('sub')
      }, 1000)
    },
    subNAsync(context, step) {
      setTimeout(() => {
        context.commit('subN', step)
      }, 1000)
    }
  },
  getters: {
    showNum(state) {
      return '当前最新的数量是【' + state.count + '】'
    }
  },
  modules: {
  }
})
